/* ////////////////////////////////////////////////////////////////////////// */
/*
//
//              INTEL CORPORATION PROPRIETARY INFORMATION
//  This software is supplied under the terms of a license  agreement or
//  nondisclosure agreement with Intel Corporation and may not be copied
//  or disclosed except in  accordance  with the terms of that agreement.
//        Copyright (c) 2005-2007 Intel Corporation. All Rights Reserved.
//
//
*/

#include "umc_defs.h"

#if defined (UMC_ENABLE_H261_VIDEO_DECODER)

#ifndef __UMC_H261_VIDEO_DECODER_H
#define __UMC_H261_VIDEO_DECODER_H

#include "ipps.h"
#include "ippvc.h"
#include "umc_structures.h"
#include "umc_video_decoder.h"
#include "h261decoder.h"

namespace UMC
{

class H261VideoDecoder : public VideoDecoder
{
public:
    // Default constructor
    H261VideoDecoder(void);
    // Destructor
    virtual ~H261VideoDecoder(void);
    // Initialize for subsequent frame decoding.
    virtual Status Init(BaseCodecParams *init);
    // Get next frame
    virtual Status GetFrame(MediaData* in, MediaData* out);
    // Close decoding & free all allocated resources
    virtual Status Close(void);
    // Reset decoder to initial state
    virtual Status  Reset(void);
    // Get decoder info
    virtual Status GetInfo(BaseCodecParams* info);
    // Get performance
    Status GetPerformance(Ipp64f *perf);
    //reset skip frame counter
    Status  ResetSkipCount();
    // increment skip frame counter
    Status  SkipVideoFrame(Ipp32s);
    // get skip frame counter statistic
    Ipp32u GetNumOfSkippedFrames();
protected:
    bool                    m_IsInit, m_IsInitBase;
    Ipp64f                  m_dec_time_base;
    VideoDecoderParams      m_Param;
    H261DEC_STATE           *m_decInfo;
    Status                  InsideInit(VideoDecoderParams *pParam);
    // allocate memory for internal buffers
    Status AllocateBuffers();
    // free memory for internal buffers
    Status FreeBuffers();
    // lock memory for internal buffers
    void LockBuffers();
    // unlock memory for internal buffers
    Status UnlockBuffers();
};

} // end namespace UMC

#endif //__UMC_H261_VIDEO_DECODER_H

#endif // defined (UMC_ENABLE_H261_VIDEO_DECODER)
